/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.camachosanchez.controler.jpa;

import com.camachosanchez.bean.ComprobacionBandaRodamientoPresion;
import com.camachosanchez.controler.jpa.exceptions.IllegalOrphanException;
import com.camachosanchez.controler.jpa.exceptions.NonexistentEntityException;
import java.io.Serializable;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Query;
import javax.persistence.EntityNotFoundException;
import com.camachosanchez.bean.Usuarios;
import com.camachosanchez.bean.Talleres;
import com.camachosanchez.bean.Vehiculos;
import com.camachosanchez.bean.MedicionComprobacion;
import com.camachosanchez.util.JPAUtil;
import java.util.ArrayList;
import java.util.List;

/**
 *
 * @author Rolando
 */
public class ComprobacionBandaRodamientoPresionJpaController implements Serializable {

    public ComprobacionBandaRodamientoPresionJpaController(EntityManagerFactory emf) {
        this.emf = emf;
    }
    private EntityManagerFactory emf = null;

    public EntityManager getEntityManager() {
        return JPAUtil.getEntityManagerFactory().createEntityManager();
    }

    public void create(ComprobacionBandaRodamientoPresion comprobacionBandaRodamientoPresion) {
        if (comprobacionBandaRodamientoPresion.getMedicionComprobacionList() == null) {
            comprobacionBandaRodamientoPresion.setMedicionComprobacionList(new ArrayList<MedicionComprobacion>());
        }
        EntityManager em = null;
        try {
            em = getEntityManager();
            em.getTransaction().begin();
            Usuarios idUsuario = comprobacionBandaRodamientoPresion.getIdUsuario();
            if (idUsuario != null) {
                idUsuario = em.getReference(idUsuario.getClass(), idUsuario.getId());
                comprobacionBandaRodamientoPresion.setIdUsuario(idUsuario);
            }
            Talleres idTaller = comprobacionBandaRodamientoPresion.getIdTaller();
            if (idTaller != null) {
                idTaller = em.getReference(idTaller.getClass(), idTaller.getId());
                comprobacionBandaRodamientoPresion.setIdTaller(idTaller);
            }
            Vehiculos idVehiculo = comprobacionBandaRodamientoPresion.getIdVehiculo();
            if (idVehiculo != null) {
                idVehiculo = em.getReference(idVehiculo.getClass(), idVehiculo.getId());
                comprobacionBandaRodamientoPresion.setIdVehiculo(idVehiculo);
            }
            List<MedicionComprobacion> attachedMedicionComprobacionList = new ArrayList<MedicionComprobacion>();
            for (MedicionComprobacion medicionComprobacionListMedicionComprobacionToAttach : comprobacionBandaRodamientoPresion.getMedicionComprobacionList()) {
                medicionComprobacionListMedicionComprobacionToAttach = em.getReference(medicionComprobacionListMedicionComprobacionToAttach.getClass(), medicionComprobacionListMedicionComprobacionToAttach.getId());
                attachedMedicionComprobacionList.add(medicionComprobacionListMedicionComprobacionToAttach);
            }
            comprobacionBandaRodamientoPresion.setMedicionComprobacionList(attachedMedicionComprobacionList);
            em.persist(comprobacionBandaRodamientoPresion);
            if (idUsuario != null) {
                idUsuario.getComprobacionBandaRodamientoPresionList().add(comprobacionBandaRodamientoPresion);
                idUsuario = em.merge(idUsuario);
            }
            if (idTaller != null) {
                idTaller.getComprobacionBandaRodamientoPresionList().add(comprobacionBandaRodamientoPresion);
                idTaller = em.merge(idTaller);
            }
            if (idVehiculo != null) {
                idVehiculo.getComprobacionBandaRodamientoPresionList().add(comprobacionBandaRodamientoPresion);
                idVehiculo = em.merge(idVehiculo);
            }
            for (MedicionComprobacion medicionComprobacionListMedicionComprobacion : comprobacionBandaRodamientoPresion.getMedicionComprobacionList()) {
                ComprobacionBandaRodamientoPresion oldIdComprobacionBandaRodamientoOfMedicionComprobacionListMedicionComprobacion = medicionComprobacionListMedicionComprobacion.getIdComprobacionBandaRodamiento();
                medicionComprobacionListMedicionComprobacion.setIdComprobacionBandaRodamiento(comprobacionBandaRodamientoPresion);
                medicionComprobacionListMedicionComprobacion = em.merge(medicionComprobacionListMedicionComprobacion);
                if (oldIdComprobacionBandaRodamientoOfMedicionComprobacionListMedicionComprobacion != null) {
                    oldIdComprobacionBandaRodamientoOfMedicionComprobacionListMedicionComprobacion.getMedicionComprobacionList().remove(medicionComprobacionListMedicionComprobacion);
                    oldIdComprobacionBandaRodamientoOfMedicionComprobacionListMedicionComprobacion = em.merge(oldIdComprobacionBandaRodamientoOfMedicionComprobacionListMedicionComprobacion);
                }
            }
            em.getTransaction().commit();
        } finally {
            if (em != null) {
                em.close();
            }
        }
    }

    public void edit(ComprobacionBandaRodamientoPresion comprobacionBandaRodamientoPresion) throws IllegalOrphanException, NonexistentEntityException, Exception {
        EntityManager em = null;
        try {
            em = getEntityManager();
            em.getTransaction().begin();
            ComprobacionBandaRodamientoPresion persistentComprobacionBandaRodamientoPresion = em.find(ComprobacionBandaRodamientoPresion.class, comprobacionBandaRodamientoPresion.getId());
            Usuarios idUsuarioOld = persistentComprobacionBandaRodamientoPresion.getIdUsuario();
            Usuarios idUsuarioNew = comprobacionBandaRodamientoPresion.getIdUsuario();
            Talleres idTallerOld = persistentComprobacionBandaRodamientoPresion.getIdTaller();
            Talleres idTallerNew = comprobacionBandaRodamientoPresion.getIdTaller();
            Vehiculos idVehiculoOld = persistentComprobacionBandaRodamientoPresion.getIdVehiculo();
            Vehiculos idVehiculoNew = comprobacionBandaRodamientoPresion.getIdVehiculo();
            List<MedicionComprobacion> medicionComprobacionListOld = persistentComprobacionBandaRodamientoPresion.getMedicionComprobacionList();
            List<MedicionComprobacion> medicionComprobacionListNew = comprobacionBandaRodamientoPresion.getMedicionComprobacionList();
            List<String> illegalOrphanMessages = null;
            for (MedicionComprobacion medicionComprobacionListOldMedicionComprobacion : medicionComprobacionListOld) {
                if (!medicionComprobacionListNew.contains(medicionComprobacionListOldMedicionComprobacion)) {
                    if (illegalOrphanMessages == null) {
                        illegalOrphanMessages = new ArrayList<String>();
                    }
                    illegalOrphanMessages.add("You must retain MedicionComprobacion " + medicionComprobacionListOldMedicionComprobacion + " since its idComprobacionBandaRodamiento field is not nullable.");
                }
            }
            if (illegalOrphanMessages != null) {
                throw new IllegalOrphanException(illegalOrphanMessages);
            }
            if (idUsuarioNew != null) {
                idUsuarioNew = em.getReference(idUsuarioNew.getClass(), idUsuarioNew.getId());
                comprobacionBandaRodamientoPresion.setIdUsuario(idUsuarioNew);
            }
            if (idTallerNew != null) {
                idTallerNew = em.getReference(idTallerNew.getClass(), idTallerNew.getId());
                comprobacionBandaRodamientoPresion.setIdTaller(idTallerNew);
            }
            if (idVehiculoNew != null) {
                idVehiculoNew = em.getReference(idVehiculoNew.getClass(), idVehiculoNew.getId());
                comprobacionBandaRodamientoPresion.setIdVehiculo(idVehiculoNew);
            }
            List<MedicionComprobacion> attachedMedicionComprobacionListNew = new ArrayList<MedicionComprobacion>();
            for (MedicionComprobacion medicionComprobacionListNewMedicionComprobacionToAttach : medicionComprobacionListNew) {
                medicionComprobacionListNewMedicionComprobacionToAttach = em.getReference(medicionComprobacionListNewMedicionComprobacionToAttach.getClass(), medicionComprobacionListNewMedicionComprobacionToAttach.getId());
                attachedMedicionComprobacionListNew.add(medicionComprobacionListNewMedicionComprobacionToAttach);
            }
            medicionComprobacionListNew = attachedMedicionComprobacionListNew;
            comprobacionBandaRodamientoPresion.setMedicionComprobacionList(medicionComprobacionListNew);
            comprobacionBandaRodamientoPresion = em.merge(comprobacionBandaRodamientoPresion);
            if (idUsuarioOld != null && !idUsuarioOld.equals(idUsuarioNew)) {
                idUsuarioOld.getComprobacionBandaRodamientoPresionList().remove(comprobacionBandaRodamientoPresion);
                idUsuarioOld = em.merge(idUsuarioOld);
            }
            if (idUsuarioNew != null && !idUsuarioNew.equals(idUsuarioOld)) {
                idUsuarioNew.getComprobacionBandaRodamientoPresionList().add(comprobacionBandaRodamientoPresion);
                idUsuarioNew = em.merge(idUsuarioNew);
            }
            if (idTallerOld != null && !idTallerOld.equals(idTallerNew)) {
                idTallerOld.getComprobacionBandaRodamientoPresionList().remove(comprobacionBandaRodamientoPresion);
                idTallerOld = em.merge(idTallerOld);
            }
            if (idTallerNew != null && !idTallerNew.equals(idTallerOld)) {
                idTallerNew.getComprobacionBandaRodamientoPresionList().add(comprobacionBandaRodamientoPresion);
                idTallerNew = em.merge(idTallerNew);
            }
            if (idVehiculoOld != null && !idVehiculoOld.equals(idVehiculoNew)) {
                idVehiculoOld.getComprobacionBandaRodamientoPresionList().remove(comprobacionBandaRodamientoPresion);
                idVehiculoOld = em.merge(idVehiculoOld);
            }
            if (idVehiculoNew != null && !idVehiculoNew.equals(idVehiculoOld)) {
                idVehiculoNew.getComprobacionBandaRodamientoPresionList().add(comprobacionBandaRodamientoPresion);
                idVehiculoNew = em.merge(idVehiculoNew);
            }
            for (MedicionComprobacion medicionComprobacionListNewMedicionComprobacion : medicionComprobacionListNew) {
                if (!medicionComprobacionListOld.contains(medicionComprobacionListNewMedicionComprobacion)) {
                    ComprobacionBandaRodamientoPresion oldIdComprobacionBandaRodamientoOfMedicionComprobacionListNewMedicionComprobacion = medicionComprobacionListNewMedicionComprobacion.getIdComprobacionBandaRodamiento();
                    medicionComprobacionListNewMedicionComprobacion.setIdComprobacionBandaRodamiento(comprobacionBandaRodamientoPresion);
                    medicionComprobacionListNewMedicionComprobacion = em.merge(medicionComprobacionListNewMedicionComprobacion);
                    if (oldIdComprobacionBandaRodamientoOfMedicionComprobacionListNewMedicionComprobacion != null && !oldIdComprobacionBandaRodamientoOfMedicionComprobacionListNewMedicionComprobacion.equals(comprobacionBandaRodamientoPresion)) {
                        oldIdComprobacionBandaRodamientoOfMedicionComprobacionListNewMedicionComprobacion.getMedicionComprobacionList().remove(medicionComprobacionListNewMedicionComprobacion);
                        oldIdComprobacionBandaRodamientoOfMedicionComprobacionListNewMedicionComprobacion = em.merge(oldIdComprobacionBandaRodamientoOfMedicionComprobacionListNewMedicionComprobacion);
                    }
                }
            }
            em.getTransaction().commit();
        } catch (Exception ex) {
            String msg = ex.getLocalizedMessage();
            if (msg == null || msg.length() == 0) {
                Integer id = comprobacionBandaRodamientoPresion.getId();
                if (findComprobacionBandaRodamientoPresion(id) == null) {
                    throw new NonexistentEntityException("The comprobacionBandaRodamientoPresion with id " + id + " no longer exists.");
                }
            }
            throw ex;
        } finally {
            if (em != null) {
                em.close();
            }
        }
    }

    public void destroy(Integer id) throws IllegalOrphanException, NonexistentEntityException {
        EntityManager em = null;
        try {
            em = getEntityManager();
            em.getTransaction().begin();
            ComprobacionBandaRodamientoPresion comprobacionBandaRodamientoPresion;
            try {
                comprobacionBandaRodamientoPresion = em.getReference(ComprobacionBandaRodamientoPresion.class, id);
                comprobacionBandaRodamientoPresion.getId();
            } catch (EntityNotFoundException enfe) {
                throw new NonexistentEntityException("The comprobacionBandaRodamientoPresion with id " + id + " no longer exists.", enfe);
            }
            List<String> illegalOrphanMessages = null;
            List<MedicionComprobacion> medicionComprobacionListOrphanCheck = comprobacionBandaRodamientoPresion.getMedicionComprobacionList();
            for (MedicionComprobacion medicionComprobacionListOrphanCheckMedicionComprobacion : medicionComprobacionListOrphanCheck) {
                if (illegalOrphanMessages == null) {
                    illegalOrphanMessages = new ArrayList<String>();
                }
                illegalOrphanMessages.add("This ComprobacionBandaRodamientoPresion (" + comprobacionBandaRodamientoPresion + ") cannot be destroyed since the MedicionComprobacion " + medicionComprobacionListOrphanCheckMedicionComprobacion + " in its medicionComprobacionList field has a non-nullable idComprobacionBandaRodamiento field.");
            }
            if (illegalOrphanMessages != null) {
                throw new IllegalOrphanException(illegalOrphanMessages);
            }
            Usuarios idUsuario = comprobacionBandaRodamientoPresion.getIdUsuario();
            if (idUsuario != null) {
                idUsuario.getComprobacionBandaRodamientoPresionList().remove(comprobacionBandaRodamientoPresion);
                idUsuario = em.merge(idUsuario);
            }
            Talleres idTaller = comprobacionBandaRodamientoPresion.getIdTaller();
            if (idTaller != null) {
                idTaller.getComprobacionBandaRodamientoPresionList().remove(comprobacionBandaRodamientoPresion);
                idTaller = em.merge(idTaller);
            }
            Vehiculos idVehiculo = comprobacionBandaRodamientoPresion.getIdVehiculo();
            if (idVehiculo != null) {
                idVehiculo.getComprobacionBandaRodamientoPresionList().remove(comprobacionBandaRodamientoPresion);
                idVehiculo = em.merge(idVehiculo);
            }
            em.remove(comprobacionBandaRodamientoPresion);
            em.getTransaction().commit();
        } finally {
            if (em != null) {
                em.close();
            }
        }
    }

    public List<ComprobacionBandaRodamientoPresion> findComprobacionBandaRodamientoPresionEntities() {
        return findComprobacionBandaRodamientoPresionEntities(true, -1, -1);
    }

    public List<ComprobacionBandaRodamientoPresion> findComprobacionBandaRodamientoPresionEntities(int maxResults, int firstResult) {
        return findComprobacionBandaRodamientoPresionEntities(false, maxResults, firstResult);
    }

    private List<ComprobacionBandaRodamientoPresion> findComprobacionBandaRodamientoPresionEntities(boolean all, int maxResults, int firstResult) {
        EntityManager em = getEntityManager();
        try {
            Query q = em.createQuery("select object(o) from ComprobacionBandaRodamientoPresion as o");
            if (!all) {
                q.setMaxResults(maxResults);
                q.setFirstResult(firstResult);
            }
            return q.getResultList();
        } finally {
            em.close();
        }
    }

    public ComprobacionBandaRodamientoPresion findComprobacionBandaRodamientoPresion(Integer id) {
        EntityManager em = getEntityManager();
        try {
            return em.find(ComprobacionBandaRodamientoPresion.class, id);
        } finally {
            em.close();
        }
    }

    public int getComprobacionBandaRodamientoPresionCount() {
        EntityManager em = getEntityManager();
        try {
            Query q = em.createQuery("select count(o) from ComprobacionBandaRodamientoPresion as o");
            return ((Long) q.getSingleResult()).intValue();
        } finally {
            em.close();
        }
    }
    
}
